package pl.com.like.sequoia.model.admin;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import pl.com.like.sequoia.model.Pojo;

@Entity
@Table(name = "comparison_settings")
@SequenceGenerator(allocationSize = 1, sequenceName = "comparison_settings_seq", name = "compSeq")
public class SearchParameters extends Pojo<Long> {

	private static final long serialVersionUID = 4548043289517058084L;

	@Id
	@GeneratedValue(generator = "compSeq", strategy = GenerationType.SEQUENCE)
	@Column(name = "ID")
	private Long id;
	@Column(name = "initial_k")
	private Integer initialK;

	@Column(name = "seed_fragment_length")
	private Integer seedFragmentLength;

	@Column(name = "seed_rmsd_cutoff")
	private Float seedRmsdCutoff; // orig 2.0 - better?

	@Column(name = "fragment_length")
	private Integer fragmentLength;

	@Column(name = "diagonal_distance")
	private Integer diagonalDistance;

	@Column(name = "diagonal_distance2")
	private Integer diagonalDistance2; // this helps a lot in 1buz vs 1aua

	@Column(name = "fragment_mini_distance")
	private Float fragmentMiniDistance; // orig 2

	@Column(name = "angle_diff")
	private Integer angleDiff;

	@Column(name = "frag_compat")
	private Float fragCompat; // orig 4.0

	@Column(name = "max_refine")
	private Integer maxrefine; // orig 20

	// step 2
	@Column(name = "reduce_initial_fragments")
	private Boolean reduceInitialFragments; // if this is disabled, you might want to also disable

	// doRMSCheck for large structures...
	@Column(name = "join_rms_cutoff")
	private Float joinRMSCutoff; // orig 4

	@Column(name = "join_plo")
	private Boolean joinPlo;

	// 3 joint fragments
	@Column(name = "do_angle_check")
	private Boolean doAngleCheck;

	@Column(name = "do_distance_check")
	private Boolean doDistanceCheck;

	@Column(name = "do_rms_check")
	private Boolean doRMSCheck;

	@Column(name = "do_density_check")
	private Boolean doDensityCheck; // hm this one needs improvements before being used

	@Column(name = "density_cutoff")
	private Float densityCutoff;

	// step 3
	@Column(name = "create_co")
	private Float create_co;

	@Column(name = "max_iter")
	private Integer maxIter; // number of times dynamic programming is run. set to zero for quick search (but

	// imprecise)
	@Column(name = "gap_open")
	private Float gapOpen;

	@Column(name = "gap_extension")
	private Float gapExtension;

	@Column(name = "permutation_size")
	private Integer permutationSize;

	@Column(name = "eval_cutoff")
	private Float evalCutoff;

	public Integer getAngleDiff() {
		return angleDiff;
	}

	public Float getCreate_co() {
		return create_co;
	}

	public Float getDensityCutoff() {
		return densityCutoff;
	}

	public Integer getDiagonalDistance() {
		return diagonalDistance;
	}

	public Integer getDiagonalDistance2() {
		return diagonalDistance2;
	}

	public Boolean getDoAngleCheck() {
		return doAngleCheck;
	}

	public Boolean getDoDensityCheck() {
		return doDensityCheck;
	}

	public Boolean getDoDistanceCheck() {
		return doDistanceCheck;
	}

	public Boolean getDoRMSCheck() {
		return doRMSCheck;
	}

	public Float getEvalCutoff() {
		return evalCutoff;
	}

	public Float getFragCompat() {
		return fragCompat;
	}

	public Integer getFragmentLength() {
		return fragmentLength;
	}

	public Float getFragmentMiniDistance() {
		return fragmentMiniDistance;
	}

	public Float getGapExtension() {
		return gapExtension;
	}

	public Float getGapOpen() {
		return gapOpen;
	}

	@Override
	public Long getId() {
		return id;
	}

	public Integer getInitialK() {
		return initialK;
	}

	public Boolean getJoinPlo() {
		return joinPlo;
	}

	public Float getJoinRMSCutoff() {
		return joinRMSCutoff;
	}

	public Integer getMaxIter() {
		return maxIter;
	}

	public Integer getMaxrefine() {
		return maxrefine;
	}

	public Integer getPermutationSize() {
		return permutationSize;
	}

	public Boolean getReduceInitialFragments() {
		return reduceInitialFragments;
	}

	public Integer getSeedFragmentLength() {
		return seedFragmentLength;
	}

	public Float getSeedRmsdCutoff() {
		return seedRmsdCutoff;
	}

	public void setAngleDiff(Integer angleDiff) {
		this.angleDiff = angleDiff;
	}

	public void setCreate_co(Float createCo) {
		create_co = createCo;
	}

	public void setDensityCutoff(Float densityCutoff) {
		this.densityCutoff = densityCutoff;
	}

	public void setDiagonalDistance(Integer diagonalDistance) {
		this.diagonalDistance = diagonalDistance;
	}

	public void setDiagonalDistance2(Integer diagonalDistance2) {
		this.diagonalDistance2 = diagonalDistance2;
	}

	public void setDoAngleCheck(Boolean doAngleCheck) {
		this.doAngleCheck = doAngleCheck;
	}

	public void setDoDensityCheck(Boolean doDensityCheck) {
		this.doDensityCheck = doDensityCheck;
	}

	public void setDoDistanceCheck(Boolean doDistanceCheck) {
		this.doDistanceCheck = doDistanceCheck;
	}

	public void setDoRMSCheck(Boolean doRMSCheck) {
		this.doRMSCheck = doRMSCheck;
	}

	public void setEvalCutoff(Float evalCutoff) {
		this.evalCutoff = evalCutoff;
	}

	public void setFragCompat(Float fragCompat) {
		this.fragCompat = fragCompat;
	}

	public void setFragmentLength(Integer fragmentLength) {
		this.fragmentLength = fragmentLength;
	}

	public void setFragmentMiniDistance(Float fragmentMiniDistance) {
		this.fragmentMiniDistance = fragmentMiniDistance;
	}

	public void setGapExtension(Float gapExtension) {
		this.gapExtension = gapExtension;
	}

	public void setGapOpen(Float gapOpen) {
		this.gapOpen = gapOpen;
	}

	@Override
	public void setId(Long id) {
		this.id = id;
	}

	public void setInitialK(Integer initialK) {
		this.initialK = initialK;
	}

	public void setJoinPlo(Boolean joinPlo) {
		this.joinPlo = joinPlo;
	}

	public void setJoinRMSCutoff(Float joinRMSCutoff) {
		this.joinRMSCutoff = joinRMSCutoff;
	}

	public void setMaxIter(Integer maxIter) {
		this.maxIter = maxIter;
	}

	public void setMaxrefine(Integer maxrefine) {
		this.maxrefine = maxrefine;
	}

	public void setPermutationSize(Integer permutationSize) {
		this.permutationSize = permutationSize;
	}

	public void setReduceInitialFragments(Boolean reduceInitialFragments) {
		this.reduceInitialFragments = reduceInitialFragments;
	}

	public void setSeedFragmentLength(Integer seedFragmentLength) {
		this.seedFragmentLength = seedFragmentLength;
	}

	public void setSeedRmsdCutoff(Float seedRmsdCutoff) {
		this.seedRmsdCutoff = seedRmsdCutoff;
	}
}
